﻿// 5060. 排队打饭.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>



using namespace std;
/*

https://www.acwing.com/problem/content/5063/
有 n 个同学在同一个食堂窗口排队打饭，按照到达队伍的时间顺序，从先到后依次编号为 1∼n。

其中，第 i个同学的到达队伍时刻为 ai，打饭耗时为 ti。

每个同学的耐心都是有限的，第 i个同学的最大等待时间为 bi
，即如果其在第 ai+bi 时刻还没有开始打饭，他就会离开队伍，放弃打饭。

在一个同学打完饭后，下一个同学会立即开始打饭，中间的时间损耗忽略不计。

例如，如果一个同学在时刻 1开始打饭，打饭耗时为 3
，那么他会在时刻 4打完饭，而下一个同学也会在时刻 4 开始打饭。

请你计算，每个同学的开始打饭时刻。

输入格式
第一行包含整数 n。

接下来 n行，其中第 i行包含三个整数 ai,ti,bi。

输出格式
共一行，输出 n 个整数，其中第 i个整数表示第 i 个同学的开始打饭时刻，如果该同学放弃打饭，则输出 -1。

数据范围
1≤n≤105
,
1≤ai,ti,bi≤109
。
数据保证 a1<a2<…<an
。

输入样例：
4
1 3 3
2 2 2
3 9 1
4 3 2
输出样例：
1 4 -1 6
*/


const int N = 100010;

struct CLASS {
	int a, t, b;
}cla[N];
int n;


int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> cla[i].a >> cla[i].t >> cla[i].b;
	}

	long long  curr = 1;
	for (int i = 1; i <= n; i++) {
		if (curr <= cla[i].a) {
			cout << cla[i].a << " ";
			curr = cla[i].a + cla[i].t;
		}
		else if (curr > cla[i].a + cla[i].b) {
			cout << -1 << " "; continue;
		}
		else if (curr <= cla[i].a + cla[i].b) {
			cout << curr << " ";
			curr = curr + cla[i].t;
		}
	}
	cout << endl;

}
 